package com.lyj.sc.book.zhanheduilie;

import java.util.Stack;

/**
 * @program: code-random
 * @description:【题目】实现一个特殊的栈，在实现栈的基本功能的基础上，再实现返回栈中最小元素的操作。【要求】1．pop、push、getMin操作的时间复杂度都是O(1)。2．设计的栈类型可以使用现成的栈结构。
 * @author: lyj
 * @create: 2022-07-08 11:42
 * @version: 1.0
 * @Modifier By:
 **/
public class getMin {
    private Stack<Integer> stackData;
    private Stack<Integer> stackMin;

    public getMin(){
        this.stackData=new Stack<Integer>();
        this.stackMin=new Stack<Integer>();
    }

    public void push(Integer i){
        if(this.stackMin.empty()){
            stackMin.push(i);
        }else if(this.getMin1()>=i){
            stackMin.push(i);
        }
        stackData.push(i);
    }
    public int getMin1(){
        if(this.stackMin.isEmpty()){
            throw new RuntimeException("empty");
        }
        return this.stackMin.peek();
    }

    public int pop(){
        if(this.stackMin.isEmpty()){
            throw new RuntimeException("empty");
        }
        int value = this.stackData.pop();
        if(value == this.getMin1()){
            this.stackMin.pop();
        }
        return value;
    }
}
